package com.bjtang.util;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.bjtang.test.User;


public class MapList  {
	   private static volatile MapList mapList;
	    private static Map<String,User> cacheSingletonMap;
	    
	    private static List<User> inUser;
	    
	    private static List<User> outUser;
	    private MapList(){
	    	//初始化加载后只有读的操作,无需考虑多线程情况
	        cacheSingletonMap = new HashMap<String, User>();
	        //多线程适用
	        inUser =  Collections.synchronizedList(new ArrayList<User>());
	        //多线程适用
	        outUser =  Collections.synchronizedList(new ArrayList<User>());
	    }
	    /*
	     * 单例模式有两种类型
	     * 懒汉式：在真正需要使用对象时才去创建该单例类对象
	     * 饿汉式：在类加载时已经创建好该单例对象，等待被程序使用
	     */

	    // 懒汉式单例模式
	    public static MapList getInstance(){
	        if (mapList == null){// 线程A和线程B同时看到cacheSingletonUtil = null，如果不为null，则直接返回cacheSingletonUtil
	            synchronized (MapList.class) {// 线程A或线程B获得该锁进行初始化
	                if (mapList == null) {// 其中一个线程进入该分支，另外一个线程则不会进入该分支
	                	mapList = new MapList();
	                }
	            }
	        }
	        return mapList;
	    }


	    
	    /**
	     * 添加到内存
	     */
	    public void addCacheData(String key,User obj){
	        cacheSingletonMap.put(key,obj);
	    }

	    /**
	     * 从内存中取出
	     */
	    public User getCacheData(String key){
	        return cacheSingletonMap.get(key);
	    }

	    /**
	     * 从内存中清除
	     */
	    public void removeCacheData(String key){
	        cacheSingletonMap.remove(key);
	    }

	    
	    /**
	     * 添加到内存
	     */
	    public void addInUser(User obj){
	    	inUser.add(obj);
	    }

	    /**
	     * 从内存中取出
	     */
	    public List<User> getInUserList(){
	        return inUser;
	    }

	    /**
	     * 从内存中清除
	     */
	    public void removeInUserAll(){
	    	inUser.clear();
	    }
	    /**
	     * 添加到内存
	     */
	    public void addOutUser(User obj){
	    	outUser.add(obj);
	    }

	    /**
	     * 从内存中取出
	     */
	    public List<User> getOutUserList(){
	        return outUser;
	    }

	    /**
	     * 从内存中清除
	     */
	    public void removeOutUserAll(){
	    	outUser.clear();
	    }

	

}
